--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
tests/backend/test_dao_fuzzing.py bc8969ab162af244f42eabca93382e30c471f72a (bc8969ab) Text, 24.72 KB
T8b949e"""Property-based and fuzz tests for DAO layers, MessageHandler, and utility functions.
Covers gaps identified in the existing test suite:
- ContactsDAO: add, search, update with adversarial strings
- ConfigDAO: get/set/delete round-trip with arbitrary keys and values
- MiscDAO: spam keywords, notifications, keyboard shortcuts
- TelephoneDAO: add + search with adversarial strings
- VoicemailDAO: add + search
- DebugLogsDAO: insert + search + count consistency
- RingtoneDAO: add + update with adversarial display names
- MapDrawingsDAO: upsert + update with arbitrary JSON data
- MessageDAO: folder create/rename
- MessageHandler: search_messages, get_conversations with adversarial search terms
- _safe_href: URL sanitization (XSS vectors)
- parse_bool_query_param: arbitrary strings
- message_fields_have_attachments: arbitrary JSON
"""
Tff7b72import T7ee787json
Tff7b72import T7ee787pytest
Tff7b72from T7ee787hypothesis Tff7b72import Te6edf3HealthCheckTb4b4b4, Te6edf3givenTb4b4b4, Te6edf3settings
Tff7b72from T7ee787hypothesis Tff7b72import Te6edf3strategies Tff7b72as Te6edf3st
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787database Tff7b72import Te6edf3Database
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787markdown_renderer Tff7b72import Te6edf3_safe_href
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787meshchat_utils Tff7b72import Tb4b4b4(
Te6edf3message_fields_have_attachmentsTb4b4b4,
Te6edf3parse_bool_query_paramTb4b4b4,
Tb4b4b4)
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787message_handler Tff7b72import Te6edf3MessageHandler
T8b949e# ---------------------------------------------------------------------------
T8b949e# Strategies
T8b949e# ---------------------------------------------------------------------------
T8b949e# Strings that are valid for most text columns but include adversarial chars
Te6edf3st_nasty_text Tff7b72= Te6edf3stTff7b72.Td2a8fftextTb4b4b4(
Te6edf3alphabetTff7b72=Te6edf3stTff7b72.Td2a8ffcharactersTb4b4b4(Te6edf3whitelist_categoriesTff7b72=Tb4b4b4(Ta5d6ff"Ta5d6ffLTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffNTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffPTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffSTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffZTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffCTa5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3min_sizeTff7b72=T79c0ff0Tb4b4b4,
Te6edf3max_sizeTff7b72=T79c0ff300Tb4b4b4,
Tb4b4b4)
Te6edf3st_sql_payloads Tff7b72= Te6edf3stTff7b72.Td2a8ffsampled_fromTb4b4b4(
Tb4b4b4[
Ta5d6ff"Ta5d6ff'Ta5d6ff; DROP TABLE config; --Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff'Ta5d6ff OR Ta5d6ff'Ta5d6ff1Ta5d6ff'Ta5d6ff=Ta5d6ff'Ta5d6ff1Ta5d6ff"Tb4b4b4,
Ta5d6ff'Ta5d6ff"Ta5d6ff OR Ta5d6ff"Ta5d6ff1Ta5d6ff"Ta5d6ff=Ta5d6ff"Ta5d6ff1Ta5d6ff'Tb4b4b4,
Ta5d6ff"Ta5d6ff1; SELECT * FROM sqlite_masterTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffRobertTa5d6ff'Ta5d6ff); DROP TABLE lxmf_messages;--Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff%Ta5d6ff"Tb4b4b4,
Ta5d6ff"Tffd700%%Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff_Ta5d6ff"Tb4b4b4,
Ta5d6ff"Tffea00\x00Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff'Ta5d6ff UNION SELECT key, value FROM config --Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffNULLTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff1=1Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffadminTa5d6ff'Ta5d6ff--Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff'Ta5d6ff AND 1=CONVERT(int,(SELECT TOP 1 table_name FROM information_schema.tables))--Ta5d6ff"Tb4b4b4,
Tb4b4b4]
Tb4b4b4)
Te6edf3st_search_term Tff7b72= Te6edf3stTff7b72.Td2a8ffone_ofTb4b4b4(Te6edf3st_nasty_textTb4b4b4, Te6edf3st_sql_payloadsTb4b4b4)
Te6edf3st_hex_hash Tff7b72= Te6edf3stTff7b72.Td2a8fffrom_regexTb4b4b4(Ta5d6ffrTa5d6ff"Ta5d6ff[0-9a-f]Ta5d6ff{Ta5d6ff16,64}Ta5d6ff"Tb4b4b4, Te6edf3fullmatchTff7b72=Tff7b72TrueTb4b4b4)
T8b949e# ---------------------------------------------------------------------------
T8b949e# Fixture: initialised in-memory database
T8b949e# ---------------------------------------------------------------------------
Tf0883e@pytestTff7b72.Td2a8fffixture
Tff7b72def Td2a8ffdbTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3database Tff7b72= Te6edf3DatabaseTb4b4b4(Ta5d6ff"Ta5d6ff:memory:Ta5d6ff"Tb4b4b4)
Te6edf3databaseTff7b72.Td2a8ffinitializeTb4b4b4(Tb4b4b4)
Tff7b72yield Te6edf3database
Te6edf3databaseTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Tf0883e@pytestTff7b72.Td2a8fffixture
Tff7b72def Td2a8ffhandlerTb4b4b4(Te6edf3dbTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3MessageHandlerTb4b4b4(Te6edf3dbTb4b4b4)
T8b949e# ===================================================================
T8b949e# ContactsDAO
T8b949e# ===================================================================
Tff7b72class T56d364TestContactsDAOFuzzingTb4b4b4:
Tf0883e@givenTb4b4b4(
Te6edf3nameTff7b72=Te6edf3st_nasty_textTb4b4b4,
Te6edf3identity_hashTff7b72=Te6edf3st_hex_hashTb4b4b4,
Te6edf3lxmf_addrTff7b72=Te6edf3stTff7b72.Td2a8ffone_ofTb4b4b4(Te6edf3stTff7b72.Td2a8ffnoneTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3st_hex_hashTb4b4b4)Tb4b4b4,
Te6edf3lxst_addrTff7b72=Te6edf3stTff7b72.Td2a8ffone_ofTb4b4b4(Te6edf3stTff7b72.Td2a8ffnoneTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3st_hex_hashTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tf0883e@settingsTb4b4b4(
Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fffunction_scoped_fixtureTb4b4b4]Tb4b4b4,
Te6edf3max_examplesTff7b72=T79c0ff60Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_add_contact_roundtripTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dbTb4b4b4, Te6edf3nameTb4b4b4, Te6edf3identity_hashTb4b4b4, Te6edf3lxmf_addrTb4b4b4, Te6edf3lxst_addrTb4b4b4)Tb4b4b4:
Te6edf3dbTff7b72.Td2a8ffcontactsTff7b72.Td2a8ffadd_contactTb4b4b4(
Te6edf3nameTff7b72=Te6edf3nameTb4b4b4,
Te6edf3remote_identity_hashTff7b72=Te6edf3identity_hashTb4b4b4,
Te6edf3lxmf_addressTff7b72=Te6edf3lxmf_addrTb4b4b4,
Te6edf3lxst_addressTff7b72=Te6edf3lxst_addrTb4b4b4,
Tb4b4b4)
Te6edf3row Tff7b72= Te6edf3dbTff7b72.Td2a8ffcontactsTff7b72.Td2a8ffget_contact_by_identity_hashTb4b4b4(Te6edf3identity_hashTb4b4b4)
Tff7b72assert Te6edf3row Tff7b72is Tff7b72not Tff7b72None
Tff7b72assert Te6edf3rowTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3name
Tf0883e@givenTb4b4b4(Te6edf3searchTff7b72=Te6edf3st_search_termTb4b4b4)
Tf0883e@settingsTb4b4b4(
Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fffunction_scoped_fixtureTb4b4b4]Tb4b4b4,
Te6edf3max_examplesTff7b72=T79c0ff80Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_search_contacts_never_crashesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dbTb4b4b4, Te6edf3searchTb4b4b4)Tb4b4b4:
Te6edf3results Tff7b72= Te6edf3dbTff7b72.Td2a8ffcontactsTff7b72.Td2a8ffget_contactsTb4b4b4(Te6edf3searchTff7b72=Te6edf3searchTb4b4b4)
Tff7b72assert Tffa657isinstanceTb4b4b4(Te6edf3resultsTb4b4b4, Tffa657listTb4b4b4)
Te6edf3count Tff7b72= Te6edf3dbTff7b72.Td2a8ffcontactsTff7b72.Td2a8ffget_contacts_countTb4b4b4(Te6edf3searchTff7b72=Te6edf3searchTb4b4b4)
Tff7b72assert Tffa657isinstanceTb4b4b4(Te6edf3countTb4b4b4, Tffa657intTb4b4b4)
Tff7b72assert Te6edf3count Tff7b72>Tff7b72= T79c0ff0
Tf0883e@givenTb4b4b4(
Te6edf3nameTff7b72=Te6edf3st_nasty_textTb4b4b4,
Te6edf3identity_hashTff7b72=Te6edf3st_hex_hashTb4b4b4,
Tb4b4b4)
Tf0883e@settingsTb4b4b4(
Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fffunction_scoped_fixtureTb4b4b4]Tb4b4b4,
Te6edf3max_examplesTff7b72=T79c0ff40Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_update_contact_never_crashesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dbTb4b4b4, Te6edf3nameTb4b4b4, Te6edf3identity_hashTb4b4b4)Tb4b4b4:
Te6edf3dbTff7b72.Td2a8ffcontactsTff7b72.Td2a8ffadd_contactTb4b4b4(Te6edf3nameTff7b72=Ta5d6ff"Ta5d6fforigTa5d6ff"Tb4b4b4, Te6edf3remote_identity_hashTff7b72=Te6edf3identity_hashTb4b4b4)
Te6edf3row Tff7b72= Te6edf3dbTff7b72.Td2a8ffcontactsTff7b72.Td2a8ffget_contact_by_identity_hashTb4b4b4(Te6edf3identity_hashTb4b4b4)
Tff7b72assert Te6edf3row Tff7b72is Tff7b72not Tff7b72None
Te6edf3dbTff7b72.Td2a8ffcontactsTff7b72.Td2a8ffupdate_contactTb4b4b4(Te6edf3rowTb4b4b4[Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3nameTff7b72=Te6edf3nameTb4b4b4)
Te6edf3updated Tff7b72= Te6edf3dbTff7b72.Td2a8ffcontactsTff7b72.Td2a8ffget_contactTb4b4b4(Te6edf3rowTb4b4b4[Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72assert Te6edf3updatedTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3name
T8b949e# ===================================================================
T8b949e# ConfigDAO
T8b949e# ===================================================================
Tff7b72class T56d364TestConfigDAOFuzzingTb4b4b4:
Tf0883e@givenTb4b4b4(Te6edf3keyTff7b72=Te6edf3st_nasty_textTff7b72.Td2a8fffilterTb4b4b4(Tff7b72lambda Te6edf3xTb4b4b4: Tffa657lenTb4b4b4(Te6edf3xTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4)Tb4b4b4, Te6edf3valueTff7b72=Te6edf3st_nasty_textTb4b4b4)
Tf0883e@settingsTb4b4b4(
Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fffunction_scoped_fixtureTb4b4b4]Tb4b4b4,
Te6edf3max_examplesTff7b72=T79c0ff80Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_config_set_get_roundtripTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dbTb4b4b4, Te6edf3keyTb4b4b4, Te6edf3valueTb4b4b4)Tb4b4b4:
Te6edf3dbTff7b72.Td2a8ffconfigTff7b72.Td2a8ffsetTb4b4b4(Te6edf3keyTb4b4b4, Te6edf3valueTb4b4b4)
Te6edf3got Tff7b72= Te6edf3dbTff7b72.Td2a8ffconfigTff7b72.Td2a8ffgetTb4b4b4(Te6edf3keyTb4b4b4)
Tff7b72assert Te6edf3got Tff7b72== Te6edf3value
Tf0883e@givenTb4b4b4(Te6edf3keyTff7b72=Te6edf3st_nasty_textTff7b72.Td2a8fffilterTb4b4b4(Tff7b72lambda Te6edf3xTb4b4b4: Tffa657lenTb4b4b4(Te6edf3xTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4)Tb4b4b4)
Tf0883e@settingsTb4b4b4(
Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fffunction_scoped_fixtureTb4b4b4]Tb4b4b4,
Te6edf3max_examplesTff7b72=T79c0ff40Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_config_delete_never_crashesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dbTb4b4b4, Te6edf3keyTb4b4b4)Tb4b4b4:
Te6edf3dbTff7b72.Td2a8ffconfigTff7b72.Td2a8ffsetTb4b4b4(Te6edf3keyTb4b4b4, Ta5d6ff"Ta5d6fftempTa5d6ff"Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffconfigTff7b72.Td2a8ffdeleteTb4b4b4(Te6edf3keyTb4b4b4)
Tff7b72assert Te6edf3dbTff7b72.Td2a8ffconfigTff7b72.Td2a8ffgetTb4b4b4(Te6edf3keyTb4b4b4) Tff7b72is Tff7b72None
Tf0883e@givenTb4b4b4(Te6edf3keyTff7b72=Te6edf3st_sql_payloadsTb4b4b4)
Tf0883e@settingsTb4b4b4(
Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fffunction_scoped_fixtureTb4b4b4]Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_config_sql_injection_keysTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dbTb4b4b4, Te6edf3keyTb4b4b4)Tb4b4b4:
Te6edf3dbTff7b72.Td2a8ffconfigTff7b72.Td2a8ffsetTb4b4b4(Te6edf3keyTb4b4b4, Ta5d6ff"Ta5d6ffinjected?Ta5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3dbTff7b72.Td2a8ffconfigTff7b72.Td2a8ffgetTb4b4b4(Te6edf3keyTb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffinjected?Ta5d6ff"
Te6edf3tables Tff7b72= Te6edf3dbTff7b72.Td2a8ffproviderTff7b72.Td2a8fffetchallTb4b4b4(
Ta5d6ff"Ta5d6ffSELECT name FROM sqlite_master WHERE type=Ta5d6ff'Ta5d6fftableTa5d6ff'Ta5d6ff"
Tb4b4b4)
Te6edf3table_names Tff7b72= Tb4b4b4{Te6edf3rTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4] Tff7b72for Te6edf3r Tff7b72in Te6edf3tablesTb4b4b4}
Tff7b72assert Ta5d6ff"Ta5d6ffconfigTa5d6ff" Tff7b72in Te6edf3table_names
T8b949e# ===================================================================
T8b949e# MiscDAO — spam keywords, notifications, keyboard shortcuts
T8b949e# ===================================================================
Tff7b72class T56d364TestMiscDAOFuzzingTb4b4b4:
Tf0883e@givenTb4b4b4(Te6edf3keywordTff7b72=Te6edf3st_nasty_textTff7b72.Td2a8fffilterTb4b4b4(Tff7b72lambda Te6edf3xTb4b4b4: Tffa657lenTb4b4b4(Te6edf3xTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4)Tb4b4b4)
Tf0883e@settingsTb4b4b4(
Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fffunction_scoped_fixtureTb4b4b4]Tb4b4b4,
Te6edf3max_examplesTff7b72=T79c0ff50Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_spam_keyword_roundtripTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dbTb4b4b4, Te6edf3keywordTb4b4b4)Tb4b4b4:
Te6edf3dbTff7b72.Td2a8ffmiscTff7b72.Td2a8ffadd_spam_keywordTb4b4b4(Te6edf3keywordTb4b4b4)
Te6edf3keywords Tff7b72= Te6edf3dbTff7b72.Td2a8ffmiscTff7b72.Td2a8ffget_spam_keywordsTb4b4b4(Tb4b4b4)
Tff7b72assert Tffa657anyTb4b4b4(Te6edf3kTb4b4b4[Ta5d6ff"Ta5d6ffkeywordTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3keyword Tff7b72for Te6edf3k Tff7b72in Te6edf3keywordsTb4b4b4)
Tf0883e@givenTb4b4b4(Te6edf3titleTff7b72=Te6edf3st_nasty_textTb4b4b4, Te6edf3contentTff7b72=Te6edf3st_nasty_textTb4b4b4)
Tf0883e@settingsTb4b4b4(
Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fffunction_scoped_fixtureTb4b4b4]Tb4b4b4,
Te6edf3max_examplesTff7b72=T79c0ff50Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_check_spam_never_crashesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dbTb4b4b4, Te6edf3titleTb4b4b4, Te6edf3contentTb4b4b4)Tb4b4b4:
Te6edf3result Tff7b72= Te6edf3dbTff7b72.Td2a8ffmiscTff7b72.Td2a8ffcheck_spam_keywordsTb4b4b4(Te6edf3titleTb4b4b4, Te6edf3contentTb4b4b4)
Tff7b72assert Tffa657isinstanceTb4b4b4(Te6edf3resultTb4b4b4, Tffa657boolTb4b4b4)
Tf0883e@givenTb4b4b4(
Te6edf3ntypeTff7b72=Te6edf3stTff7b72.Td2a8ffsampled_fromTb4b4b4(Tb4b4b4[Ta5d6ff"Ta5d6ffmessageTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffcallTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffvoicemailTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffsystemTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4,
Te6edf3remote_hashTff7b72=Te6edf3st_hex_hashTb4b4b4,
Te6edf3titleTff7b72=Te6edf3st_nasty_textTb4b4b4,
Te6edf3contentTff7b72=Te6edf3st_nasty_textTb4b4b4,
Tb4b4b4)
Tf0883e@settingsTb4b4b4(
Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fffunction_scoped_fixtureTb4b4b4]Tb4b4b4,
Te6edf3max_examplesTff7b72=T79c0ff40Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_add_notification_never_crashesTb4b4b4(
Tff7b72selfTb4b4b4, Te6edf3dbTb4b4b4, Te6edf3ntypeTb4b4b4, Te6edf3remote_hashTb4b4b4, Te6edf3titleTb4b4b4, Te6edf3content
Tb4b4b4)Tb4b4b4:
Te6edf3dbTff7b72.Td2a8ffmiscTff7b72.Td2a8ffadd_notificationTb4b4b4(Te6edf3ntypeTb4b4b4, Te6edf3remote_hashTb4b4b4, Te6edf3titleTb4b4b4, Te6edf3contentTb4b4b4)
Te6edf3notifications Tff7b72= Te6edf3dbTff7b72.Td2a8ffmiscTff7b72.Td2a8ffget_notificationsTb4b4b4(Tb4b4b4)
Tff7b72assert Tffa657isinstanceTb4b4b4(Te6edf3notificationsTb4b4b4, Tffa657listTb4b4b4)
Tf0883e@givenTb4b4b4(
Te6edf3actionTff7b72=Te6edf3st_nasty_textTff7b72.Td2a8fffilterTb4b4b4(Tff7b72lambda Te6edf3xTb4b4b4: Tffa657lenTb4b4b4(Te6edf3xTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4)Tb4b4b4,
Te6edf3keysTff7b72=Te6edf3st_nasty_textTb4b4b4,
Tb4b4b4)
Tf0883e@settingsTb4b4b4(
Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fffunction_scoped_fixtureTb4b4b4]Tb4b4b4,
Te6edf3max_examplesTff7b72=T79c0ff40Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_keyboard_shortcut_roundtripTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dbTb4b4b4, Te6edf3actionTb4b4b4, Te6edf3keysTb4b4b4)Tb4b4b4:
Te6edf3identity Tff7b72= Ta5d6ff"Ta5d6fftesthashTa5d6ff"
Te6edf3dbTff7b72.Td2a8ffmiscTff7b72.Td2a8ffupsert_keyboard_shortcutTb4b4b4(Te6edf3identityTb4b4b4, Te6edf3actionTb4b4b4, Te6edf3keysTb4b4b4)
Te6edf3shortcuts Tff7b72= Te6edf3dbTff7b72.Td2a8ffmiscTff7b72.Td2a8ffget_keyboard_shortcutsTb4b4b4(Te6edf3identityTb4b4b4)
Tff7b72assert Tffa657anyTb4b4b4(Te6edf3sTb4b4b4[Ta5d6ff"Ta5d6ffactionTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3action Tff7b72and Te6edf3sTb4b4b4[Ta5d6ff"Ta5d6ffkeysTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3keys Tff7b72for Te6edf3s Tff7b72in Te6edf3shortcutsTb4b4b4)
Tf0883e@givenTb4b4b4(
Te6edf3queryTff7b72=Te6edf3st_search_termTb4b4b4,
Te6edf3destTff7b72=Te6edf3stTff7b72.Td2a8ffone_ofTb4b4b4(Te6edf3stTff7b72.Td2a8ffnoneTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3st_hex_hashTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tf0883e@settingsTb4b4b4(
Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fffunction_scoped_fixtureTb4b4b4]Tb4b4b4,
Te6edf3max_examplesTff7b72=T79c0ff40Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_archived_pages_search_never_crashesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dbTb4b4b4, Te6edf3queryTb4b4b4, Te6edf3destTb4b4b4)Tb4b4b4:
Te6edf3results Tff7b72= Te6edf3dbTff7b72.Td2a8ffmiscTff7b72.Td2a8ffget_archived_pages_paginatedTb4b4b4(
Te6edf3destination_hashTff7b72=Te6edf3destTb4b4b4,
Te6edf3queryTff7b72=Te6edf3query Tff7b72if Te6edf3query Tff7b72else Tff7b72NoneTb4b4b4,
Tb4b4b4)
Tff7b72assert Tffa657isinstanceTb4b4b4(Te6edf3resultsTb4b4b4, Tffa657listTb4b4b4)
T8b949e# ===================================================================
T8b949e# TelephoneDAO
T8b949e# ===================================================================
Tff7b72class T56d364TestTelephoneDAOFuzzingTb4b4b4:
Tf0883e@givenTb4b4b4(
Te6edf3nameTff7b72=Te6edf3st_nasty_textTb4b4b4,
Te6edf3identity_hashTff7b72=Te6edf3st_hex_hashTb4b4b4,
Te6edf3statusTff7b72=Te6edf3stTff7b72.Td2a8ffsampled_fromTb4b4b4(Tb4b4b4[Ta5d6ff"Ta5d6ffansweredTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffmissedTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffrejectedTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffbusyTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tf0883e@settingsTb4b4b4(
Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fffunction_scoped_fixtureTb4b4b4]Tb4b4b4,
Te6edf3max_examplesTff7b72=T79c0ff40Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_add_call_history_never_crashesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dbTb4b4b4, Te6edf3nameTb4b4b4, Te6edf3identity_hashTb4b4b4, Te6edf3statusTb4b4b4)Tb4b4b4:
Tff7b72import T7ee787time
Te6edf3dbTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffadd_call_historyTb4b4b4(
Te6edf3remote_identity_hashTff7b72=Te6edf3identity_hashTb4b4b4,
Te6edf3remote_identity_nameTff7b72=Te6edf3nameTb4b4b4,
Te6edf3is_incomingTff7b72=Tff7b72TrueTb4b4b4,
Te6edf3statusTff7b72=Te6edf3statusTb4b4b4,
Te6edf3duration_secondsTff7b72=T79c0ff42Tb4b4b4,
Te6edf3timestampTff7b72=Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3history Tff7b72= Te6edf3dbTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffget_call_historyTb4b4b4(Tb4b4b4)
Tff7b72assert Tffa657isinstanceTb4b4b4(Te6edf3historyTb4b4b4, Tffa657listTb4b4b4)
Tff7b72assert Tffa657lenTb4b4b4(Te6edf3historyTb4b4b4) Tff7b72> T79c0ff0
Tf0883e@givenTb4b4b4(Te6edf3searchTff7b72=Te6edf3st_search_termTb4b4b4)
Tf0883e@settingsTb4b4b4(
Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fffunction_scoped_fixtureTb4b4b4]Tb4b4b4,
Te6edf3max_examplesTff7b72=T79c0ff60Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_call_history_search_never_crashesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dbTb4b4b4, Te6edf3searchTb4b4b4)Tb4b4b4:
Te6edf3results Tff7b72= Te6edf3dbTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffget_call_historyTb4b4b4(Te6edf3searchTff7b72=Te6edf3searchTb4b4b4)
Tff7b72assert Tffa657isinstanceTb4b4b4(Te6edf3resultsTb4b4b4, Tffa657listTb4b4b4)
Tf0883e@givenTb4b4b4(Te6edf3searchTff7b72=Te6edf3st_search_termTb4b4b4)
Tf0883e@settingsTb4b4b4(
Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fffunction_scoped_fixtureTb4b4b4]Tb4b4b4,
Te6edf3max_examplesTff7b72=T79c0ff60Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_call_recordings_search_never_crashesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dbTb4b4b4, Te6edf3searchTb4b4b4)Tb4b4b4:
Te6edf3results Tff7b72= Te6edf3dbTff7b72.Td2a8fftelephoneTff7b72.Td2a8ffget_call_recordingsTb4b4b4(Te6edf3searchTff7b72=Te6edf3searchTb4b4b4)
Tff7b72assert Tffa657isinstanceTb4b4b4(Te6edf3resultsTb4b4b4, Tffa657listTb4b4b4)
T8b949e# ===================================================================
T8b949e# VoicemailDAO
T8b949e# ===================================================================
Tff7b72class T56d364TestVoicemailDAOFuzzingTb4b4b4:
Tf0883e@givenTb4b4b4(
Te6edf3nameTff7b72=Te6edf3st_nasty_textTb4b4b4,
Te6edf3identity_hashTff7b72=Te6edf3st_hex_hashTb4b4b4,
Te6edf3filenameTff7b72=Te6edf3st_nasty_textTb4b4b4,
Tb4b4b4)
Tf0883e@settingsTb4b4b4(
Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fffunction_scoped_fixtureTb4b4b4]Tb4b4b4,
Te6edf3max_examplesTff7b72=T79c0ff40Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_add_voicemail_never_crashesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dbTb4b4b4, Te6edf3nameTb4b4b4, Te6edf3identity_hashTb4b4b4, Te6edf3filenameTb4b4b4)Tb4b4b4:
Tff7b72import T7ee787time
Te6edf3dbTff7b72.Td2a8ffvoicemailsTff7b72.Td2a8ffadd_voicemailTb4b4b4(
Te6edf3remote_identity_hashTff7b72=Te6edf3identity_hashTb4b4b4,
Te6edf3remote_identity_nameTff7b72=Te6edf3nameTb4b4b4,
Te6edf3filenameTff7b72=Te6edf3filenameTb4b4b4,
Te6edf3duration_secondsTff7b72=T79c0ff10Tb4b4b4,
Te6edf3timestampTff7b72=Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3vms Tff7b72= Te6edf3dbTff7b72.Td2a8ffvoicemailsTff7b72.Td2a8ffget_voicemailsTb4b4b4(Tb4b4b4)
Tff7b72assert Tffa657isinstanceTb4b4b4(Te6edf3vmsTb4b4b4, Tffa657listTb4b4b4)
Tf0883e@givenTb4b4b4(Te6edf3searchTff7b72=Te6edf3st_search_termTb4b4b4)
Tf0883e@settingsTb4b4b4(
Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fffunction_scoped_fixtureTb4b4b4]Tb4b4b4,
Te6edf3max_examplesTff7b72=T79c0ff60Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_voicemail_search_never_crashesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dbTb4b4b4, Te6edf3searchTb4b4b4)Tb4b4b4:
Te6edf3results Tff7b72= Te6edf3dbTff7b72.Td2a8ffvoicemailsTff7b72.Td2a8ffget_voicemailsTb4b4b4(Te6edf3searchTff7b72=Te6edf3searchTb4b4b4)
Tff7b72assert Tffa657isinstanceTb4b4b4(Te6edf3resultsTb4b4b4, Tffa657listTb4b4b4)
T8b949e# ===================================================================
T8b949e# DebugLogsDAO
T8b949e# ===================================================================
Tff7b72class T56d364TestDebugLogsDAOFuzzingTb4b4b4:
Tf0883e@givenTb4b4b4(
Te6edf3levelTff7b72=Te6edf3stTff7b72.Td2a8ffsampled_fromTb4b4b4(Tb4b4b4[Ta5d6ff"Ta5d6ffDEBUGTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffINFOTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffWARNINGTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffERRORTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffCRITICALTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4,
Te6edf3moduleTff7b72=Te6edf3st_nasty_textTb4b4b4,
Te6edf3messageTff7b72=Te6edf3st_nasty_textTb4b4b4,
Tb4b4b4)
Tf0883e@settingsTb4b4b4(
Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fffunction_scoped_fixtureTb4b4b4]Tb4b4b4,
Te6edf3max_examplesTff7b72=T79c0ff50Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_insert_log_never_crashesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dbTb4b4b4, Te6edf3levelTb4b4b4, Te6edf3moduleTb4b4b4, Te6edf3messageTb4b4b4)Tb4b4b4:
Te6edf3dbTff7b72.Td2a8ffdebug_logsTff7b72.Td2a8ffinsert_logTb4b4b4(Te6edf3levelTb4b4b4, Te6edf3moduleTb4b4b4, Te6edf3messageTb4b4b4)
Te6edf3total Tff7b72= Te6edf3dbTff7b72.Td2a8ffdebug_logsTff7b72.Td2a8ffget_total_countTb4b4b4(Tb4b4b4)
Tff7b72assert Te6edf3total Tff7b72> T79c0ff0
Tf0883e@givenTb4b4b4(
Te6edf3searchTff7b72=Te6edf3st_search_termTb4b4b4,
Te6edf3levelTff7b72=Te6edf3stTff7b72.Td2a8ffone_ofTb4b4b4(Te6edf3stTff7b72.Td2a8ffnoneTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3stTff7b72.Td2a8ffsampled_fromTb4b4b4(Tb4b4b4[Ta5d6ff"Ta5d6ffDEBUGTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffINFOTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffERRORTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3moduleTff7b72=Te6edf3stTff7b72.Td2a8ffone_ofTb4b4b4(Te6edf3stTff7b72.Td2a8ffnoneTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3st_nasty_textTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tf0883e@settingsTb4b4b4(
Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fffunction_scoped_fixtureTb4b4b4]Tb4b4b4,
Te6edf3max_examplesTff7b72=T79c0ff60Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_search_logs_never_crashesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dbTb4b4b4, Te6edf3searchTb4b4b4, Te6edf3levelTb4b4b4, Te6edf3moduleTb4b4b4)Tb4b4b4:
Te6edf3results Tff7b72= Te6edf3dbTff7b72.Td2a8ffdebug_logsTff7b72.Td2a8ffget_logsTb4b4b4(Te6edf3searchTff7b72=Te6edf3searchTb4b4b4, Te6edf3levelTff7b72=Te6edf3levelTb4b4b4, Te6edf3moduleTff7b72=Te6edf3moduleTb4b4b4)
Tff7b72assert Tffa657isinstanceTb4b4b4(Te6edf3resultsTb4b4b4, Tffa657listTb4b4b4)
Te6edf3count Tff7b72= Te6edf3dbTff7b72.Td2a8ffdebug_logsTff7b72.Td2a8ffget_total_countTb4b4b4(Te6edf3searchTff7b72=Te6edf3searchTb4b4b4, Te6edf3levelTff7b72=Te6edf3levelTb4b4b4, Te6edf3moduleTff7b72=Te6edf3moduleTb4b4b4)
Tff7b72assert Tffa657isinstanceTb4b4b4(Te6edf3countTb4b4b4, Tffa657intTb4b4b4)
Tff7b72assert Te6edf3count Tff7b72>Tff7b72= T79c0ff0
Tf0883e@givenTb4b4b4(
Te6edf3searchTff7b72=Te6edf3st_search_termTb4b4b4,
Te6edf3levelTff7b72=Te6edf3stTff7b72.Td2a8ffone_ofTb4b4b4(Te6edf3stTff7b72.Td2a8ffnoneTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3stTff7b72.Td2a8ffsampled_fromTb4b4b4(Tb4b4b4[Ta5d6ff"Ta5d6ffDEBUGTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffINFOTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffERRORTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tf0883e@settingsTb4b4b4(
Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fffunction_scoped_fixtureTb4b4b4]Tb4b4b4,
Te6edf3max_examplesTff7b72=T79c0ff40Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_count_matches_result_lengthTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dbTb4b4b4, Te6edf3searchTb4b4b4, Te6edf3levelTb4b4b4)Tb4b4b4:
T8b949e"""get_total_count must be consistent with len(get_logs) when no limit truncation."""
Te6edf3results Tff7b72= Te6edf3dbTff7b72.Td2a8ffdebug_logsTff7b72.Td2a8ffget_logsTb4b4b4(
Te6edf3searchTff7b72=Te6edf3searchTb4b4b4,
Te6edf3levelTff7b72=Te6edf3levelTb4b4b4,
Te6edf3limitTff7b72=T79c0ff100000Tb4b4b4,
Te6edf3offsetTff7b72=T79c0ff0Tb4b4b4,
Tb4b4b4)
Te6edf3count Tff7b72= Te6edf3dbTff7b72.Td2a8ffdebug_logsTff7b72.Td2a8ffget_total_countTb4b4b4(Te6edf3searchTff7b72=Te6edf3searchTb4b4b4, Te6edf3levelTff7b72=Te6edf3levelTb4b4b4)
Tff7b72assert Te6edf3count Tff7b72== Tffa657lenTb4b4b4(Te6edf3resultsTb4b4b4)
T8b949e# ===================================================================
T8b949e# RingtoneDAO
T8b949e# ===================================================================
Tff7b72class T56d364TestRingtoneDAOFuzzingTb4b4b4:
Tf0883e@givenTb4b4b4(
Te6edf3filenameTff7b72=Te6edf3st_nasty_textTff7b72.Td2a8fffilterTb4b4b4(Tff7b72lambda Te6edf3xTb4b4b4: Tffa657lenTb4b4b4(Te6edf3xTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4)Tb4b4b4,
Te6edf3display_nameTff7b72=Te6edf3st_nasty_textTff7b72.Td2a8fffilterTb4b4b4(Tff7b72lambda Te6edf3xTb4b4b4: Tffa657lenTb4b4b4(Te6edf3xTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tf0883e@settingsTb4b4b4(
Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fffunction_scoped_fixtureTb4b4b4]Tb4b4b4,
Te6edf3max_examplesTff7b72=T79c0ff40Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_add_ringtone_roundtripTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dbTb4b4b4, Te6edf3filenameTb4b4b4, Te6edf3display_nameTb4b4b4)Tb4b4b4:
Te6edf3rid Tff7b72= Te6edf3dbTff7b72.Td2a8ffringtonesTff7b72.Td2a8ffaddTb4b4b4(Te6edf3filenameTb4b4b4, Ta5d6fffTa5d6ff"Ta5d6ffstore_Tffd700{Te6edf3filenameTb4b4b4[Tb4b4b4:T79c0ff20Tb4b4b4]Tffd700}Ta5d6ff"Tb4b4b4, Te6edf3display_nameTb4b4b4)
Tff7b72assert Te6edf3rid Tff7b72is Tff7b72not Tff7b72None
Te6edf3row Tff7b72= Te6edf3dbTff7b72.Td2a8ffringtonesTff7b72.Td2a8ffget_by_idTb4b4b4(Te6edf3ridTb4b4b4)
Tff7b72assert Te6edf3row Tff7b72is Tff7b72not Tff7b72None
Tff7b72assert Te6edf3rowTb4b4b4[Ta5d6ff"Ta5d6ffdisplay_nameTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3display_name
Tf0883e@givenTb4b4b4(Te6edf3new_nameTff7b72=Te6edf3st_nasty_textTff7b72.Td2a8fffilterTb4b4b4(Tff7b72lambda Te6edf3xTb4b4b4: Tffa657lenTb4b4b4(Te6edf3xTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4)Tb4b4b4)
Tf0883e@settingsTb4b4b4(
Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fffunction_scoped_fixtureTb4b4b4]Tb4b4b4,
Te6edf3max_examplesTff7b72=T79c0ff30Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_update_display_nameTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dbTb4b4b4, Te6edf3new_nameTb4b4b4)Tb4b4b4:
Te6edf3rid Tff7b72= Te6edf3dbTff7b72.Td2a8ffringtonesTff7b72.Td2a8ffaddTb4b4b4(Ta5d6ff"Ta5d6fftest.oggTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffstore_test.oggTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffOriginalTa5d6ff"Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffringtonesTff7b72.Td2a8ffupdateTb4b4b4(Te6edf3ridTb4b4b4, Te6edf3display_nameTff7b72=Te6edf3new_nameTb4b4b4)
Te6edf3row Tff7b72= Te6edf3dbTff7b72.Td2a8ffringtonesTff7b72.Td2a8ffget_by_idTb4b4b4(Te6edf3ridTb4b4b4)
Tff7b72assert Te6edf3rowTb4b4b4[Ta5d6ff"Ta5d6ffdisplay_nameTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3new_name
T8b949e# ===================================================================
T8b949e# MapDrawingsDAO
T8b949e# ===================================================================
Tff7b72class T56d364TestMapDrawingsDAOFuzzingTb4b4b4:
Tf0883e@givenTb4b4b4(
Te6edf3nameTff7b72=Te6edf3st_nasty_textTff7b72.Td2a8fffilterTb4b4b4(Tff7b72lambda Te6edf3xTb4b4b4: Tffa657lenTb4b4b4(Te6edf3xTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4)Tb4b4b4,
Te6edf3dataTff7b72=Te6edf3stTff7b72.Td2a8ffone_ofTb4b4b4(
Te6edf3st_nasty_textTb4b4b4,
Te6edf3stTff7b72.Td2a8ffbuildsTb4b4b4(
Te6edf3jsonTff7b72.Td2a8ffdumpsTb4b4b4,
Te6edf3stTff7b72.Td2a8ffdictionariesTb4b4b4(
Te6edf3stTff7b72.Td2a8fftextTb4b4b4(Te6edf3max_sizeTff7b72=T79c0ff10Tb4b4b4)Tb4b4b4, Te6edf3stTff7b72.Td2a8fftextTb4b4b4(Te6edf3max_sizeTff7b72=T79c0ff50Tb4b4b4)Tb4b4b4, Te6edf3max_sizeTff7b72=T79c0ff10
Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tf0883e@settingsTb4b4b4(
Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fffunction_scoped_fixtureTb4b4b4]Tb4b4b4,
Te6edf3max_examplesTff7b72=T79c0ff40Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_upsert_drawing_roundtripTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dbTb4b4b4, Te6edf3nameTb4b4b4, Te6edf3dataTb4b4b4)Tb4b4b4:
Te6edf3identity Tff7b72= Ta5d6ff"Ta5d6ffdeadbeef01234567Ta5d6ff"
Te6edf3dbTff7b72.Td2a8ffmap_drawingsTff7b72.Td2a8ffupsert_drawingTb4b4b4(Te6edf3identityTb4b4b4, Te6edf3nameTb4b4b4, Te6edf3dataTb4b4b4)
Te6edf3drawings Tff7b72= Te6edf3dbTff7b72.Td2a8ffmap_drawingsTff7b72.Td2a8ffget_drawingsTb4b4b4(Te6edf3identityTb4b4b4)
Tff7b72assert Tffa657anyTb4b4b4(Te6edf3dTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3name Tff7b72for Te6edf3d Tff7b72in Te6edf3drawingsTb4b4b4)
T8b949e# ===================================================================
T8b949e# MessageDAO — folders
T8b949e# ===================================================================
Tff7b72class T56d364TestMessageDAOFoldersFuzzingTb4b4b4:
Tf0883e@givenTb4b4b4(Te6edf3nameTff7b72=Te6edf3st_nasty_textTff7b72.Td2a8fffilterTb4b4b4(Tff7b72lambda Te6edf3xTb4b4b4: Tffa657lenTb4b4b4(Te6edf3xTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4)Tb4b4b4)
Tf0883e@settingsTb4b4b4(
Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fffunction_scoped_fixtureTb4b4b4]Tb4b4b4,
Te6edf3max_examplesTff7b72=T79c0ff40Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_create_folder_roundtripTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dbTb4b4b4, Te6edf3nameTb4b4b4)Tb4b4b4:
Te6edf3dbTff7b72.Td2a8ffmessagesTff7b72.Td2a8ffcreate_folderTb4b4b4(Te6edf3nameTb4b4b4)
Te6edf3folders Tff7b72= Te6edf3dbTff7b72.Td2a8ffmessagesTff7b72.Td2a8ffget_all_foldersTb4b4b4(Tb4b4b4)
Tff7b72assert Tffa657anyTb4b4b4(Te6edf3fTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3name Tff7b72for Te6edf3f Tff7b72in Te6edf3foldersTb4b4b4)
Tf0883e@givenTb4b4b4(
Te6edf3originalTff7b72=Te6edf3st_nasty_textTff7b72.Td2a8fffilterTb4b4b4(Tff7b72lambda Te6edf3xTb4b4b4: Tffa657lenTb4b4b4(Te6edf3xTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4)Tb4b4b4,
Te6edf3renamedTff7b72=Te6edf3st_nasty_textTff7b72.Td2a8fffilterTb4b4b4(Tff7b72lambda Te6edf3xTb4b4b4: Tffa657lenTb4b4b4(Te6edf3xTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tf0883e@settingsTb4b4b4(
Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fffunction_scoped_fixtureTb4b4b4]Tb4b4b4,
Te6edf3max_examplesTff7b72=T79c0ff30Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_rename_folderTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dbTb4b4b4, Te6edf3originalTb4b4b4, Te6edf3renamedTb4b4b4)Tb4b4b4:
Te6edf3dbTff7b72.Td2a8ffproviderTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffDELETE FROM lxmf_foldersTa5d6ff"Tb4b4b4)
Te6edf3cursor Tff7b72= Te6edf3dbTff7b72.Td2a8ffmessagesTff7b72.Td2a8ffcreate_folderTb4b4b4(Te6edf3originalTb4b4b4)
Te6edf3folder_id Tff7b72= Te6edf3cursorTff7b72.Td2a8fflastrowid
Te6edf3dbTff7b72.Td2a8ffmessagesTff7b72.Td2a8ffrename_folderTb4b4b4(Te6edf3folder_idTb4b4b4, Te6edf3renamedTb4b4b4)
Te6edf3folders Tff7b72= Te6edf3dbTff7b72.Td2a8ffmessagesTff7b72.Td2a8ffget_all_foldersTb4b4b4(Tb4b4b4)
Te6edf3found Tff7b72= Tb4b4b4[Te6edf3f Tff7b72for Te6edf3f Tff7b72in Te6edf3folders Tff7b72if Te6edf3fTb4b4b4[Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3folder_idTb4b4b4]
Tff7b72assert Tffa657lenTb4b4b4(Te6edf3foundTb4b4b4) Tff7b72== T79c0ff1
Tff7b72assert Te6edf3foundTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3renamed
T8b949e# ===================================================================
T8b949e# MessageHandler — search
T8b949e# ===================================================================
Tff7b72class T56d364TestMessageHandlerFuzzingTb4b4b4:
Tf0883e@givenTb4b4b4(Te6edf3searchTff7b72=Te6edf3st_search_termTb4b4b4)
Tf0883e@settingsTb4b4b4(
Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fffunction_scoped_fixtureTb4b4b4]Tb4b4b4,
Te6edf3max_examplesTff7b72=T79c0ff80Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_search_messages_never_crashesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3handlerTb4b4b4, Te6edf3searchTb4b4b4)Tb4b4b4:
Te6edf3results Tff7b72= Te6edf3handlerTff7b72.Td2a8ffsearch_messagesTb4b4b4(Ta5d6ff"Ta5d6fflocal_hashTa5d6ff"Tb4b4b4, Te6edf3searchTb4b4b4)
Tff7b72assert Tffa657isinstanceTb4b4b4(Te6edf3resultsTb4b4b4, Tffa657listTb4b4b4)
Tf0883e@givenTb4b4b4(Te6edf3searchTff7b72=Te6edf3st_search_termTb4b4b4)
Tf0883e@settingsTb4b4b4(
Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fffunction_scoped_fixtureTb4b4b4]Tb4b4b4,
Te6edf3max_examplesTff7b72=T79c0ff60Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_get_conversations_search_never_crashesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3handlerTb4b4b4, Te6edf3searchTb4b4b4)Tb4b4b4:
Te6edf3results Tff7b72= Te6edf3handlerTff7b72.Td2a8ffget_conversationsTb4b4b4(Ta5d6ff"Ta5d6fflocal_hashTa5d6ff"Tb4b4b4, Te6edf3searchTff7b72=Te6edf3searchTb4b4b4)
Tff7b72assert Tffa657isinstanceTb4b4b4(Te6edf3resultsTb4b4b4, Tffa657listTb4b4b4)
Tf0883e@givenTb4b4b4(
Te6edf3searchTff7b72=Te6edf3st_search_termTb4b4b4,
Te6edf3folder_idTff7b72=Te6edf3stTff7b72.Td2a8ffone_ofTb4b4b4(Te6edf3stTff7b72.Td2a8ffnoneTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3stTff7b72.Td2a8ffintegersTb4b4b4(Te6edf3min_valueTff7b72=T79c0ff0Tb4b4b4, Te6edf3max_valueTff7b72=T79c0ff1000Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tf0883e@settingsTb4b4b4(
Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fffunction_scoped_fixtureTb4b4b4]Tb4b4b4,
Te6edf3max_examplesTff7b72=T79c0ff40Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_get_conversations_with_filtersTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3handlerTb4b4b4, Te6edf3searchTb4b4b4, Te6edf3folder_idTb4b4b4)Tb4b4b4:
Te6edf3results Tff7b72= Te6edf3handlerTff7b72.Td2a8ffget_conversationsTb4b4b4(
Ta5d6ff"Ta5d6fflocal_hashTa5d6ff"Tb4b4b4,
Te6edf3searchTff7b72=Te6edf3searchTb4b4b4,
Te6edf3folder_idTff7b72=Te6edf3folder_idTb4b4b4,
Te6edf3filter_unreadTff7b72=Tff7b72TrueTb4b4b4,
Tb4b4b4)
Tff7b72assert Tffa657isinstanceTb4b4b4(Te6edf3resultsTb4b4b4, Tffa657listTb4b4b4)
Tf0883e@givenTb4b4b4(
Te6edf3destTff7b72=Te6edf3st_hex_hashTb4b4b4,
Te6edf3after_idTff7b72=Te6edf3stTff7b72.Td2a8ffone_ofTb4b4b4(Te6edf3stTff7b72.Td2a8ffnoneTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3stTff7b72.Td2a8ffintegersTb4b4b4(Te6edf3min_valueTff7b72=Tff7b72-T79c0ff1000Tb4b4b4, Te6edf3max_valueTff7b72=T79c0ff1000Tb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3before_idTff7b72=Te6edf3stTff7b72.Td2a8ffone_ofTb4b4b4(Te6edf3stTff7b72.Td2a8ffnoneTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3stTff7b72.Td2a8ffintegersTb4b4b4(Te6edf3min_valueTff7b72=Tff7b72-T79c0ff1000Tb4b4b4, Te6edf3max_valueTff7b72=T79c0ff1000Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tf0883e@settingsTb4b4b4(
Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fffunction_scoped_fixtureTb4b4b4]Tb4b4b4,
Te6edf3max_examplesTff7b72=T79c0ff40Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_get_conversation_messages_never_crashesTb4b4b4(
Tff7b72selfTb4b4b4, Te6edf3handlerTb4b4b4, Te6edf3destTb4b4b4, Te6edf3after_idTb4b4b4, Te6edf3before_id
Tb4b4b4)Tb4b4b4:
Te6edf3results Tff7b72= Te6edf3handlerTff7b72.Td2a8ffget_conversation_messagesTb4b4b4(
Ta5d6ff"Ta5d6fflocal_hashTa5d6ff"Tb4b4b4,
Te6edf3destTb4b4b4,
Te6edf3after_idTff7b72=Te6edf3after_idTb4b4b4,
Te6edf3before_idTff7b72=Te6edf3before_idTb4b4b4,
Tb4b4b4)
Tff7b72assert Tffa657isinstanceTb4b4b4(Te6edf3resultsTb4b4b4, Tffa657listTb4b4b4)
T8b949e# ===================================================================
T8b949e# _safe_href — URL sanitization
T8b949e# ===================================================================
Tff7b72class T56d364TestSafeHrefFuzzingTb4b4b4:
Tf0883e@givenTb4b4b4(Te6edf3urlTff7b72=Te6edf3stTff7b72.Td2a8fftextTb4b4b4(Te6edf3max_sizeTff7b72=T79c0ff500Tb4b4b4)Tb4b4b4)
Tf0883e@settingsTb4b4b4(Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4, Te6edf3max_examplesTff7b72=T79c0ff200Tb4b4b4)
Tff7b72def Td2a8fftest_safe_href_never_returns_dangerous_protocolTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3urlTb4b4b4)Tb4b4b4:
Te6edf3result Tff7b72= Te6edf3_safe_hrefTb4b4b4(Te6edf3urlTb4b4b4)
Te6edf3lower Tff7b72= Te6edf3resultTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Tff7b72assert Tff7b72not Te6edf3lowerTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffjavascript:Ta5d6ff"Tb4b4b4)
Tff7b72assert Tff7b72not Te6edf3lowerTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffdata:Ta5d6ff"Tb4b4b4)
Tff7b72assert Tff7b72not Te6edf3lowerTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffvbscript:Ta5d6ff"Tb4b4b4)
Tff7b72assert Tff7b72not Te6edf3lowerTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6fffile:Ta5d6ff"Tb4b4b4)
Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffparametrizeTb4b4b4(
Ta5d6ff"Ta5d6ffurlTa5d6ff"Tb4b4b4,
Tb4b4b4[
Ta5d6ff"Ta5d6ffjavascript:alert(1)Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffJAVASCRIPT:alert(1)Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff javascript:alert(1) Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffjAvAsCrIpT:alert(document.cookie)Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffdata:text/html,<script>alert(1)</script>Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffDATA:text/html;base64,PHNjcmlwdD4=Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffvbscript:MsgBox(Ta5d6ff'Ta5d6ffxssTa5d6ff'Ta5d6ff)Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fffile:///etc/passwdTa5d6ff"Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_safe_href_blocks_xss_vectorsTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3urlTb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3_safe_hrefTb4b4b4(Te6edf3urlTb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ff#Ta5d6ff"
Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffparametrizeTb4b4b4(
Ta5d6ff"Ta5d6ffurlTa5d6ff"Tb4b4b4,
Tb4b4b4[
Ta5d6ff"Ta5d6ffhttps://example.comTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffhttp://example.comTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff/relative/pathTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff#anchorTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffmailto:test@example.comTa5d6ff"Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_safe_href_allows_safe_urlsTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3urlTb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3_safe_hrefTb4b4b4(Te6edf3urlTb4b4b4) Tff7b72== Te6edf3url
Tf0883e@givenTb4b4b4(
Te6edf3urlTff7b72=Te6edf3stTff7b72.Td2a8fffrom_regexTb4b4b4(
Ta5d6ffrTa5d6ff"Ta5d6ff(javascript|data|vbscript|file):[A-Za-z0-9()=;,/+]+Ta5d6ff"Tb4b4b4,
Te6edf3fullmatchTff7b72=Tff7b72TrueTb4b4b4,
Tb4b4b4)
Tb4b4b4)
Tf0883e@settingsTb4b4b4(Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4, Te6edf3max_examplesTff7b72=T79c0ff100Tb4b4b4)
Tff7b72def Td2a8fftest_safe_href_blocks_all_generated_dangerous_urlsTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3urlTb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3_safe_hrefTb4b4b4(Te6edf3urlTb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ff#Ta5d6ff"
Tf0883e@givenTb4b4b4(
Te6edf3schemeTff7b72=Te6edf3stTff7b72.Td2a8fftextTb4b4b4(Te6edf3min_sizeTff7b72=T79c0ff1Tb4b4b4, Te6edf3max_sizeTff7b72=T79c0ff20Tb4b4b4)Tff7b72.Td2a8fffilterTb4b4b4(
Tff7b72lambda Te6edf3sTb4b4b4: Ta5d6ff"Ta5d6ff:Ta5d6ff" Tff7b72not Tff7b72in Te6edf3s Tff7b72and Ta5d6ff"Ta5d6ff/Ta5d6ff" Tff7b72not Tff7b72in Te6edf3s
Tb4b4b4)
Tb4b4b4)
Tf0883e@settingsTb4b4b4(Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4, Te6edf3max_examplesTff7b72=T79c0ff60Tb4b4b4)
Tff7b72def Td2a8fftest_safe_href_blocks_unknown_schemesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3schemeTb4b4b4)Tb4b4b4:
T8b949e"""Any unknown scheme like 'foo:bar' should be blocked."""
Te6edf3url Tff7b72= Ta5d6fffTa5d6ff"Tffd700{Te6edf3schemeTffd700}Ta5d6ff:somethingTa5d6ff"
Te6edf3result Tff7b72= Te6edf3_safe_hrefTb4b4b4(Te6edf3urlTb4b4b4)
Te6edf3lower Tff7b72= Te6edf3urlTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657anyTb4b4b4(
Te6edf3lowerTff7b72.Td2a8ffstartswithTb4b4b4(Te6edf3pTb4b4b4) Tff7b72for Te6edf3p Tff7b72in Tb4b4b4(Ta5d6ff"Ta5d6ffhttps://Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffhttp://Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff/Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff#Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffmailto:Ta5d6ff"Tb4b4b4)
Tb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3result Tff7b72== Te6edf3url
Tff7b72elseTb4b4b4:
Tff7b72assert Te6edf3result Tff7b72== Ta5d6ff"Ta5d6ff#Ta5d6ff"
T8b949e# ===================================================================
T8b949e# parse_bool_query_param
T8b949e# ===================================================================
Tff7b72class T56d364TestParseBoolQueryParamTb4b4b4:
Tf0883e@givenTb4b4b4(Te6edf3valueTff7b72=Te6edf3stTff7b72.Td2a8fftextTb4b4b4(Te6edf3max_sizeTff7b72=T79c0ff100Tb4b4b4)Tb4b4b4)
Tf0883e@settingsTb4b4b4(Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4, Te6edf3max_examplesTff7b72=T79c0ff200Tb4b4b4)
Tff7b72def Td2a8fftest_never_crashes_and_returns_boolTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3valueTb4b4b4)Tb4b4b4:
Te6edf3result Tff7b72= Te6edf3parse_bool_query_paramTb4b4b4(Te6edf3valueTb4b4b4)
Tff7b72assert Tffa657isinstanceTb4b4b4(Te6edf3resultTb4b4b4, Tffa657boolTb4b4b4)
Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffparametrizeTb4b4b4(
Ta5d6ff"Ta5d6ffvalue,expectedTa5d6ff"Tb4b4b4,
Tb4b4b4[
Tb4b4b4(Ta5d6ff"Ta5d6ff1Ta5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6fftrueTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffTrueTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffTRUETa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffyesTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffYESTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffonTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffONTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ff0Ta5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6fffalseTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffnoTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffoffTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffmaybeTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)Tb4b4b4,
Tb4b4b4(Tff7b72NoneTb4b4b4, Tff7b72FalseTb4b4b4)Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_known_valuesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3valueTb4b4b4, Te6edf3expectedTb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3parse_bool_query_paramTb4b4b4(Te6edf3valueTb4b4b4) Tff7b72is Te6edf3expected
T8b949e# ===================================================================
T8b949e# message_fields_have_attachments
T8b949e# ===================================================================
Tff7b72class T56d364TestMessageFieldsHaveAttachmentsTb4b4b4:
Tf0883e@givenTb4b4b4(Te6edf3dataTff7b72=Te6edf3stTff7b72.Td2a8fftextTb4b4b4(Te6edf3max_sizeTff7b72=T79c0ff500Tb4b4b4)Tb4b4b4)
Tf0883e@settingsTb4b4b4(Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4, Te6edf3max_examplesTff7b72=T79c0ff100Tb4b4b4)
Tff7b72def Td2a8fftest_never_crashes_on_arbitrary_textTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dataTb4b4b4)Tb4b4b4:
Te6edf3result Tff7b72= Te6edf3message_fields_have_attachmentsTb4b4b4(Te6edf3dataTb4b4b4)
Tff7b72assert Tffa657isinstanceTb4b4b4(Te6edf3resultTb4b4b4, Tffa657boolTb4b4b4)
Tf0883e@givenTb4b4b4(
Te6edf3objTff7b72=Te6edf3stTff7b72.Td2a8ffdictionariesTb4b4b4(
Te6edf3stTff7b72.Td2a8fftextTb4b4b4(Te6edf3max_sizeTff7b72=T79c0ff20Tb4b4b4)Tb4b4b4,
Te6edf3stTff7b72.Td2a8ffone_ofTb4b4b4(Te6edf3stTff7b72.Td2a8fftextTb4b4b4(Te6edf3max_sizeTff7b72=T79c0ff50Tb4b4b4)Tb4b4b4, Te6edf3stTff7b72.Td2a8ffintegersTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3stTff7b72.Td2a8ffbooleansTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3stTff7b72.Td2a8ffnoneTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3max_sizeTff7b72=T79c0ff10Tb4b4b4,
Tb4b4b4)
Tb4b4b4)
Tf0883e@settingsTb4b4b4(Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4, Te6edf3max_examplesTff7b72=T79c0ff80Tb4b4b4)
Tff7b72def Td2a8fftest_never_crashes_on_arbitrary_json_objectsTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3objTb4b4b4)Tb4b4b4:
Te6edf3result Tff7b72= Te6edf3message_fields_have_attachmentsTb4b4b4(Te6edf3jsonTff7b72.Td2a8ffdumpsTb4b4b4(Te6edf3objTb4b4b4)Tb4b4b4)
Tff7b72assert Tffa657isinstanceTb4b4b4(Te6edf3resultTb4b4b4, Tffa657boolTb4b4b4)
Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffparametrizeTb4b4b4(
Ta5d6ff"Ta5d6fffields_json,expectedTa5d6ff"Tb4b4b4,
Tb4b4b4[
Tb4b4b4(Tff7b72NoneTb4b4b4, Tff7b72FalseTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Tffd700{}Ta5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffnot jsonTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff'Ta5d6ff{Ta5d6ff"Ta5d6ffimageTa5d6ff"Ta5d6ff: Ta5d6ff"Ta5d6ffbase64dataTa5d6ff"Ta5d6ff}Ta5d6ff'Tb4b4b4, Tff7b72TrueTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff'Ta5d6ff{Ta5d6ff"Ta5d6ffaudioTa5d6ff"Ta5d6ff: Ta5d6ff"Ta5d6ffbase64dataTa5d6ff"Ta5d6ff}Ta5d6ff'Tb4b4b4, Tff7b72TrueTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff'Ta5d6ff{Ta5d6ff"Ta5d6fffile_attachmentsTa5d6ff"Ta5d6ff: [Ta5d6ff{Ta5d6ff"Ta5d6ffnameTa5d6ff"Ta5d6ff: Ta5d6ff"Ta5d6fff.txtTa5d6ff"Ta5d6ff}]}Ta5d6ff'Tb4b4b4, Tff7b72TrueTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff'Ta5d6ff{Ta5d6ff"Ta5d6fffile_attachmentsTa5d6ff"Ta5d6ff: []}Ta5d6ff'Tb4b4b4, Tff7b72FalseTb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff'Ta5d6ff{Ta5d6ff"Ta5d6ffother_fieldTa5d6ff"Ta5d6ff: Ta5d6ff"Ta5d6ffvalueTa5d6ff"Ta5d6ff}Ta5d6ff'Tb4b4b4, Tff7b72FalseTb4b4b4)Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_known_casesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3fields_jsonTb4b4b4, Te6edf3expectedTb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3message_fields_have_attachmentsTb4b4b4(Te6edf3fields_jsonTb4b4b4) Tff7b72is Te6edf3expected
Tf0883e@givenTb4b4b4(
Te6edf3dataTff7b72=Te6edf3stTff7b72.Td2a8ffrecursiveTb4b4b4(
Te6edf3stTff7b72.Td2a8ffone_ofTb4b4b4(Te6edf3stTff7b72.Td2a8fftextTb4b4b4(Te6edf3max_sizeTff7b72=T79c0ff20Tb4b4b4)Tb4b4b4, Te6edf3stTff7b72.Td2a8ffintegersTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3stTff7b72.Td2a8ffbooleansTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3stTff7b72.Td2a8ffnoneTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tff7b72lambda Te6edf3childrenTb4b4b4: Tb4b4b4(
Te6edf3stTff7b72.Td2a8fflistsTb4b4b4(Te6edf3childrenTb4b4b4, Te6edf3max_sizeTff7b72=T79c0ff5Tb4b4b4)
Tff7b72| Te6edf3stTff7b72.Td2a8ffdictionariesTb4b4b4(Te6edf3stTff7b72.Td2a8fftextTb4b4b4(Te6edf3max_sizeTff7b72=T79c0ff10Tb4b4b4)Tb4b4b4, Te6edf3childrenTb4b4b4, Te6edf3max_sizeTff7b72=T79c0ff5Tb4b4b4)
Tb4b4b4)Tb4b4b4,
Te6edf3max_leavesTff7b72=T79c0ff30Tb4b4b4,
Tb4b4b4)
Tb4b4b4)
Tf0883e@settingsTb4b4b4(Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4, Te6edf3max_examplesTff7b72=T79c0ff60Tb4b4b4)
Tff7b72def Td2a8fftest_deeply_nested_json_never_crashesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dataTb4b4b4)Tb4b4b4:
Te6edf3result Tff7b72= Te6edf3message_fields_have_attachmentsTb4b4b4(Te6edf3jsonTff7b72.Td2a8ffdumpsTb4b4b4(Te6edf3dataTb4b4b4)Tb4b4b4)
Tff7b72assert Tffa657isinstanceTb4b4b4(Te6edf3resultTb4b4b4, Tffa657boolTb4b4b4)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────